package com.wangdong.mijiqiqi.activity;

import android.content.Intent;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;

import com.wangdong.mijiqiqi.MainActivity;
import com.wangdong.mijiqiqi.R;

public class CeshiActivity extends AppCompatActivity {

    private static String TAG = CeshiActivity.class.getSimpleName();

    /**
     * 横竖屏切换 会销毁Activity 然后重新建立
     * <p>
     * onCreate -> start -> resume -> 显示 -> pause -> stop -> destroy 结束 -> onCreate -> start -> resume
     * <p>
     * 可以做两套布局:例如400*800 竖屏 ,800*400 横屏
     */

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.i("wangdong", TAG + "==onCreate()");
        setContentView(R.layout.activity_main);

    }


    /**
     * 对于将启动模式设置为其包中的“singletop”的活动，或者如果客户端使用Intent.FLAG_ACTIVITY_SINGLE_TOP
     * 呼叫时标志startActivity(Intent)。在这两种情况下，当活动在活动堆栈顶部而不是正在启动的活动的新实例时重新启动时，
     * 将在现有实例上调用onNewIntent()，其目的是重新启动它。

     在收到新的意图之前，活动总是会暂停，所以您可以指望onResume()在此方法之后调用。

     请注意getIntent()仍然返回原意。你可以用setIntent(Intent)更新到这个新的意图。

     ==onCreate()
     ==onStart()
     ==onResume()
         |
     ==onPause()
     ==onNewIntent()
     ==onResume()
     *
     * */
    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        Log.i("wangdong",
                "CeshiFragmentActivity"+"==onNewIntent()");
    }



    /**保证activity在回收之前 会调用此方法 */
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
    }

    @Override
    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
        super.onSaveInstanceState(outState, outPersistentState);
    }
    /**
     * 《《《《 Acitivity 被回收了怎么办 ？》》》
     *
     *  假如 A 跳转  B  这个时候  手机内存不足把 A 回收掉了 ！ 那 B 点击返回  会出现生命情况！
     *
     *  答：还是会正常显示 A ，只不过这时并不会执行 onRestart 方法，而是会执行 A 的onCreate 方法
     *
     *      因为 A 在这种清苦下会被重新创建一次
     *
     *  这样看上去很正常，但是 之前的数据没有了，因为被重新创建了，  这样很严重影响用户体验 ！那怎么解决！
     *
     *  答：Activity 中 还提供了一个 onSaveInstanceState()方法  会携带一个Bundle 类型参数，Bundle提供
     *      一系列的方法用于保存数据，
     *         数据：String tempData = “Something you  just  typed”；
     *         保存数据：outState.putString("data_key",tempData);
     *      在哪里出去取出那 ！在 Activity 中的  onCreate 中有一个 Bundle savedInstanceState 取出来
     *      if( savedInstanceState != null ){
     *          Stirng tempData = savedInstanceState.getString("data_key");
     *      }
     *
     * */

    /**
     *
     * 点击手机返回键执行
     * */
    @Override
    public void onBackPressed() {
        super.onBackPressed();
        //        finish(); 已经执行了不需要在这里添加
        Log.i("wangdong",TAG+"==onBackPressed()");
    }



    /**=================   生命周期    ======== 开始 ==================*/

    /**
     * Activity 类中定义了7个回调方法，覆盖了生命收起的每一个环节
     *
     * 第一个onCreate()
     *
     * */

    /**
     * 第二个 有不可见变为可见
     */
    @Override
    protected void onStart() {
        super.onStart();
        Log.i("wangdong", TAG + "==onStart()");
    }

    /**
     * 第三个 活动准备好和用户交互，活动处于栈顶
     */
    @Override
    protected void onResume() {
        super.onResume();
        Log.i("wangdong", TAG + "==onResume()");
    }

    /**
     * 第四个 这个方法是，活动准备启动或是恢复 另一个活动的时候调用
     */
    @Override
    protected void onPause() {
        super.onPause();
        Log.i("wangdong", TAG + "==onPause()");
    }

    /**
     * 第五个 方法再活定完全不可见的时候调用 。启动新的活动，启动onPause，不会启动onStop
     */
    @Override
    protected void onStop() {
        super.onStop();
        Log.i("wangdong", TAG + "== onStop()");
    }

    /**
     * 第六个 这个方法在活动销毁之前调用 ，之后活动的状态将变为销毁状态
     */
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i("wangdong", TAG + "== onDestroy()");
    }

    /**
     * 第七个 这个方法是活动由停止状态变为运行状态之前回调 也就活动重新启动
     */
    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i("wangdong", TAG + "== onRestart()");
    }


    /**
     *
     * 以上除了onRestart方法，其它都是两两相对，从而又可以将活动分为3种生存期
     * 1.完整生存期--就是onCreate方法 到  onDestrogy方法
     * 2.可见生存期--活动onStart方法对资源进程加载 到 onStop方法 对资源进行释放
     * 3.前台生存期--活动在onResume方法和onPause 方法之间所尽力的就是前台
     * */

    /**=================  生命周期 ======== 结束 ==================*/



    /**<<<<=======  管理 Acitivity栈 使用任务（Task）也称为Back Stack 返回栈 ====== 开始  ======>>>>*/
    /** 活动状态
     *  1.运行状态---当活动处于栈顶，
     *  2.暂停状态---当活动不再处于栈顶，但是依然可见，就像栈顶的活定不是占满全屏，就有部分能看到
     *  3.停止状态---当活动不再处于栈顶位置，并且完全不可以见，就处于停止状态
     *  4.销毁状态---当一个活动从返回栈中移除后就变成了销毁状态
     * */
    /**<<<<=======  管理Acitivity栈 使用任务（Task）也称为Back Stack 返回栈 ====== 结束  =======>>>>*/



    /**############################ 活动的启动模式 ############### 开始 #####################*/

    /**
     * 活动启动模式
     *    启动模式一共有 4 种
     *     分别是 standard  ，singleTop ，singleTask ， singleInstance
     *    standard [ˈstændəd] si tan da de       single [ˈsɪŋɡəl] sei gou         Instance [ˈɪnstəns] in shi ten si
     *
     *    standard：是默认启动模式：每当启动一个activity都会，在返回栈中入栈，并置于栈顶，每次启动都会创建一个新的实例
     *
     *    singleTop：如果 A 在栈顶  再次启动  A 就不会创建一个 A 而是启动原有的 A
     *               但是如果是  A  B  这个再次启动 A  这个时候是创建 A
     *
     *    singleTask：如果是 A 启 B  ，B 再 启 A， 结果就是   原有的 A 显示  ，B 被干掉了
     *
     *    singleInstance：如果是 A  启动  B   回启动一个新的"返回栈"  来处理Activity
     *
     *
     *
     *
     *
     * */

    /**测试 启动模式*/
    public void startTop(View view) {
                /*自己启动自己  记得修改 清单文件  的模式       测试 singleTop  ,和  SingleTask */
        startActivity(new Intent(CeshiActivity.this,HomeActivity.class));


    }
    
    /**############################ 活动的启动模式 ############### 结束 #####################*/

}

